Skip to content

1、channel 有 2 种类型:无缓冲、有缓冲

2、channel 有 3 种模式:写操作模式(单向通道)、读操作模式(单向通道)、读写操作模式(双向通道)

写操作模式读操作模式读写操作模式
创建make(chan<- int)make(<-chan int)make(chan int)

3、channel 有 3 种状态:未初始化、正常、关闭

未初始化关闭正常
关闭panicpanic正常关闭
发送永远阻塞导致死锁panic阻塞或者成功发送
接收永远阻塞导致死锁缓冲区为空则为零值, 否则可以继续读阻塞或者成功接收

4、注意点

一个 channel 不能多次关闭,会导致 painc

如果多个 goroutine 都监听同一个 channel,那么 channel 上的数据都可能随机被某一个 goroutine 取走进行消费

如果多个 goroutine 监听同一个 channel,如果这个 channel 被关闭,则所有 goroutine 都能收到退出信号

木川工作室 (微信:mcmc2024)